A distributed system may include multiple storage servers, each of which may control one or more storage resources, such as disks and/or memory. Each of the storage servers may use local systems (e.g., a disk file systems) to manage the storage of data on its storage resources. Any pair of server and storage resource determines a physical storage unit, which is also called bucket. The distributed system may layer on top of, and interface with, the local systems.
Most modern distributed file systems perform distribution of named objects (e.g., files) by mapping the named objects to the physical storage units or buckets. The mapping of each of the named objects to a bucket can be performed by mapping the name of the named object to a pattern and then mapping the pattern to a bucket. The patterns of the names of the named objects can be represented by a distribution pattern. The distribution pattern can be associated with a space of slots (e.g., ordered slots). The number of slots associated with the distribution pattern can be larger than the number of physical storage units (buckets). The distribution pattern can be divided, or partitioned, into partitions. The distribution pattern can include a mapping function (e.g., a hash function, a well-mixed hash function, etc.) to map the named objects to the patterns and the distribution pattern can distribute the patterns to buckets using various methods.
Current methods of distribution represent the space of slots associated with the distribution pattern as a circle on a plane, and the distribution pattern can distribute the named objects using the circle on the plane. Partitioning with polygons can set points on the circle such that every partition is represented as an arc between two different neighboring points (vertexes). Partitioning with regular polygons can set points on the circle such that the circle is split into equal arcs and the regular polygons have at least one common vertex based on the points. Partitioning with random polygons can sets random points on the circle such that any two N and (N+1)-polygons have N common vertexes. Partitioning with compound random N-polygons can set N*M random points on the circle such that every partition is composed of M arcs randomly scattered along the circle. Partitioning by halving can set points on the circle such that every next point splits the maximal arc into different parts (e.g., 2 equal parts). However, these current approaches to distribution of named objects may provide desirable quality but not good performance, or may provide desirable performance but not good quality. Moreover, once a distribution is selected, the quality of the distribution cannot be updated.